package com.carbon.account.controller;

import com.carbon.account.service.LoginService;
import com.carbon.common.redis.RedisService;
import com.carbon.common.utils.HttpContextUtils;
import com.carbon.domain.auth.api.LoginCheckApi;
import com.carbon.domain.auth.vo.SecurityData;
import com.carbon.domain.common.ApiCode;
import com.carbon.domain.common.ApiResult;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

/**
 * 负责处理权限校验相关请求的控制器
 * 实现了LoginCheckApi接口，提供权限校验功能
 * 使用RestController注解表明这是一个RESTful API控制器
 * @author LJX
 */
@Slf4j
@RestController
@RequestMapping("check")
@Api(value = "权限校验", tags = {"权限校验 模块"})
public class CheckController implements LoginCheckApi {

    /**
     * 注入登录服务，用于执行登录相关操作
     */
    @Autowired
    private LoginService loginService;

    /**
     * 注入Redis服务，用于操作Redis缓存
     */
    @Autowired
    private RedisService redisService;

    /**
     * 验证用户权限
     *
     * @param checkUrl 需要校验权限的URL
     * @return 返回ApiResult包装的Boolean值，表示权限校验结果
     */
    @Override
    @PostMapping("/checkPermission")
    @ApiOperation(value = "验证权限")
    public ApiResult<Boolean> checkPermission(@RequestParam("checkUrl")String checkUrl) {
        Long accountId = HttpContextUtils.getAccountId();
        if (!loginService.isLogin(accountId)){
            return ApiResult.fail(ApiCode.UNAUTHORIZED);
        }
        return loginService.checkPermission(checkUrl);
    }

    /**
     * 获取当前用户的认证数据
     *
     * @return 返回ApiResult包装的SecurityData对象，包含用户认证信息
     */
    @Override
    @GetMapping("/getSecurityData")
    @ApiOperation(value = "获取认证数据")
    public ApiResult<SecurityData> getSecurityData() {
        SecurityData securityData = loginService.getSecurityData(HttpContextUtils.getAccountId());
        return ApiResult.ok(securityData);
    }

}
